// 数字和字母
export function validateNumLetter(rule, value, callback) {
  const reg = /^[A-Za-z0-9]+$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的格式'))
    } else {
      callback()
    }
  }
}
// 浮点型
export function validateDouble(rule, value, callback) {
  const reg = /^(\d+)(\.\d{1,3})?$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的格式'))
    } else {
      callback()
    }
  }
}

// 正整数
export function integer(rule, value, callback) {
  const reg = /^\d+$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正整数'))
    } else {
      callback()
    }
  }
}

// 正数小数后6位
export function validateSex(rule, value, callback) {
  const reg = /^(([1-9]{1}\d*)|(0{1}))(\.\d{0,6})?$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的数值'))
    } else {
      callback()
    }
  }
}

// 判断是否email
export function validEmail(rule, value, callback) {
  const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的邮箱'))
    } else {
      callback()
    }
  }
}

// 判断是否email(QQ,163,126)
export function validEmail01(rule, value, callback) {
  const reg = /^[\w._]+@([qQ][qQ]|126|163)\.[cC][oO][mM](\r\n|\r|\n)?$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入QQ或163或126邮箱'))
    } else {
      callback()
    }
  }
}

// 验证手机号
export function validatePhone(rule, value, callback) {
  const reg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的电话号码'))
    } else {
      callback()
    }
  }
}

// 验证身份证号码
export function validateIdNo(rule, value, callback) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的身份证号码'))
    } else {
      callback()
    }
  }
}

// 统一社会信用代码，企业信用代码
export function validateorgCreditode(rule, value, callback) {
  // const reg = /^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/   // 同时支持18位和15位社会信用代码
  const reg = /^[\dA-Z]{18}$/ // 18位
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的信用代码'))
    } else {
      callback()
    }
  }
}

// 执业证书号
export function validateCertificateNum(rule, value, callback) {
  const reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的注册执业证书号'))
    } else {
      callback()
    }
  }
}

// 执业印章号
export function validateSealNum(rule, value, callback) {
  const reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的注册执业印章号'))
    } else {
      callback()
    }
  }
}

// 经度范围是0-180，保留6位小数
export function validateLongitude(rule, value, callback) {
  const reg = /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的经度'))
    } else {
      callback()
    }
  }
}

// 纬度的范围是0−90，保留6位小数
export function validateLatitude(rule, value, callback) {
  const reg = /^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的纬度'))
    } else {
      callback()
    }
  }
}

// 高程
export function validateZ(rule, value, callback) {
  const reg = /^[0-9]{1,10}([.][0-9]{1,5})?$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if ((!reg.test(value)) && value !== '') {
      callback(new Error('请输入正确的高程'))
    } else {
      callback()
    }
  }
}

// 关于金额的使用千位分割
export function divideMoney(num) {
  console.log(num)
  if (num !== undefined && num !== null && num !== '') {
    num = num.toString()
    var s = num.charAt(0)
    const stmp = ''
    if (num === stmp) return
    const ms = num.replace(/[^\d\.]/g, '').replace(/(\.\d{10}).+$/, '$1').replace(/^0+([1-9])/, '$1').replace(/^0+$/, '0')
    const txt = ms.split('.')
    while (/\d{4}(,|$)/.test(txt[0])) { txt[0] = txt[0].replace(/(\d)(\d{3}(,|$))/, '$1,$2') }
    if (s !== '-') {
      return txt[0] + (txt.length > 1 ? '.' + txt[1] : '')
      // return txt[0] + (txt.length > 1 ? '.'(txt[1].length >= 2 ? +txt[1] : (txt[1].length === 1 ? +txt[1] + '0' : '00')) : '.00')
    } else {
      return '-' + txt[0] + (txt.length > 1 ? '.' + txt[1] : '')
      // return '-' + txt[0] + (txt.length > 1 ? '.'(txt[1].length >= 2 ? +txt[1] : (txt[1].length === 1 ? +txt[1] + '0' : '00')) : '.00')
    }
  } else {
    return ''
  }
}
// 去除金额的千位分割后万元转化为元
export function delCommafyAmount(num) {
  if (num !== undefined) {
    num = num.toString()
    num = num.replace(/[ ]/g, '') // 去除空格
    num = num.replace(/,/gi, '')
    return parseInt(Number(num) * 1000000) / 100
  } else {
    return 0
  }
}
import { BigNumber } from 'bignumber.js'
// 关于金额的使用千位分割(万元)
export function divideMoneyWan(value) {
  const v = new BigNumber(value)
  // var num = value / 10000
  if (value !== undefined && value !== null && value !== '') {
    // var num = NumberDiv(value, 10000.0, 10)
    var num = v.div(10000).toFormat()
    // num = Number(num)
    // num = num.toString()
    var s = num.charAt(0)
    const stmp = ''
    if (num === stmp) return
    const ms = num.replace(/[^\d\.]/g, '').replace(/(\.\d{10}).+$/, '$1').replace(/^0+([1-9])/, '$1').replace(/^0+$/, '0')
    const txt = ms.split('.')
    while (/\d{4}(,|$)/.test(txt[0])) { txt[0] = txt[0].replace(/(\d)(\d{3}(,|$))/, '$1,$2') }
    if (s !== '-') {
      return txt[0] + (txt.length > 1 ? '.' + txt[1] : '')
    } else {
      return '-' + txt[0] + (txt.length > 1 ? '.' + txt[1] : '')
    }
  } else {
    return ''
  }
}
const MoneyTest = /((^[1-9]\d*)|^0)(\.\d{0,6}){0,1}$/
// 金额添加千分位
export function comdify(n) {
  if (!n) return n
  const str = n.split('.')
  const re = /\d{1,3}(?=(\d{3})+$)/g
  const n1 = str[0].replace(re, '$&,')
  return str.length > 1 && str[1] ? `${n1}.${str[1]}` : `${n1}`
}
// 去除千分位中的‘，'
export function delcommafy(num) {
  if (!num) return num
  num = num.toString()
  num = num.replace(/,/gi, '')
  return num
}
export function valdateFn(rule, val, cb) {
  setTimeout(() => {
    if (val) {
      const inputVal = delcommafy(val)
      if (rule.test(inputVal)) {
        cb()
      } else {
        cb('只能是数字金额,最多六位小数')
      }
    }
    cb()
  })
}

// 验证金额数字可以为负数
export function moneyValid(rule, val, cb) {
  valdateFn(/((^-?[1-9]\d*)|^-?0)(\.\d{0,6}){0,1}$/, val, cb)
}
// 验证金额数字不可以为负数
export function moneyNValid(rule, val, cb) {
  valdateFn(MoneyTest, val, cb)
}
// 获取输入框的值
export function getInputValue(el) {
  const inputVal = el.target.value || ''
  return comdify(delcommafy(inputVal))
}

// 判断字符串是否是https?:|mailto:|tal: 开头的
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

// 检验字符串
export function validUsername(str) {
  return str.trim()
}

// 检验url
export function validURL(url) {
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(url)
}

// 判断都是小写字母
export function validLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

// 判断都是大写字母
export function validUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

// 判断是否是字母
export function validAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

// 判断是否字符串
export function isString(str) {
  if (typeof str === 'string' || str instanceof String) {
    return true
  }
  return false
}

// 判断是否数组
export function isArray(arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]'
  }
  return Array.isArray(arg)
}
